00001 #include <avr/io.h>
00002 #include "RS232.h"
00003
00004 #define F_OSC 4000000
00005 #define UART_BAUD_RATE 4800
00006 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1)
00007
00008 void uart0_init(char *s)
00009 {
00010
00011 UBRR0H = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8);
00012 UBRR0L = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);
00013
00014
00015 UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);
00016
00017
00018 UCSR0C = (1 << URSEL0) | (3 << UCSZ00);
00019 }
00020
00021 void uart0_putc(unsigned char c)
00022 {
00023
00024 while(!(UCSR0A & (1 << UDRE0)));
00025 UDR0 = c;
00026 }
00027
00028 void uart0_puts(char *s)
00029 {
00030 while (*s) {
00031 uart0_putc(*s);
00032 s++;
00033 }
00034 }
00035
00036 void uart0_send_initial_char()
00037 {
00038 while(!(UCSR0A & (1 << UDRE0)));
00039 UDR0 = 0x43;
00040 while(!(UCSR0A & (1 << UDRE0)));
00041 UDR0= 0x0d;
00042 }
00043
00044 void uart1_init()
00045 {
00046
00047 UBRR1H = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8);
00048 UBRR1L = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);
00049
00050
00051 UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);
00052
00053
00054 UCSR1C = (1 << URSEL1) | (3 << UCSZ10);
00055 }
00056
00057 void uart1_putc(unsigned char c)
00058 {
00059
00060 while(!(UCSR1A & (1 << UDRE1)));
00061 UDR1 = c;
00062 }
00063
00064 void uart1_puts(char *s)
00065 {
00066
00067 while (*s) {
00068 uart1_putc(*s);
00069 s++;
00070 }
00071 }
00072
00073 void uart1_send_initial_char()
00074 {
00075 while(!(UCSR1A & (1 << UDRE1)));
00076 UDR1 = 0x43;
00077 while(!(UCSR1A & (1 << UDRE1)));
00078 UDR1 = 0x0d;
00079 }